Skip to content

First tutorial on MULTIBINIT

Build a harmonic lattice model and run a dynamics

This lesson aims at showing how to build a harmonic model by using a second-principles approach for lattice dynamics simulations based on atomic potentials fitted on first-principles calculations.

Before beginning, it is very important to read the reference [Wojdel2013].

With this lesson, you will learn to:

  • Compute the model from the DDB
  • Generate the XML for the model
  • Run a dynamics within MULTIBINIT

In this tutorial, all the knowledge about the Density Functional Theory (DFT) and Density Functional Perturbation Theory (DFPT) should have been already acquired. In addition, the DFPT is a key feature of ABINIT for MULTIBINIT thus, in order to learn how to use the DFPT (producing the related DDB) and the associated code to merge different DDB files, please have a look at the tutorials on Phonon response, strain response and Mrgddb before to continue. After these tutorials you should be able to compute a full DFPT calculation and a complete DDB file. Thereby this tutorial will not provide the inputs for ABINIT, that you can find, however, in the previously cited tutorials.

The AGATE software, used to make the analysis of the results, is also required for this tutorial. You can install it on debian with:

sudo add-apt-repository ppa:piti-diablotin/abiout
sudo apt-get update && sudo apt-get install abiout


Supposing you made your own installation of ABINIT, the input files to run the examples are in the ~abinit/tests/ directory where ~abinit is the absolute path of the abinit top-level directory. If you have NOT made your own install, ask your system administrator where to find the package, especially the executable and test files.

In case you work on your own PC or workstation, to make things easier, we suggest you define some handy environment variables by executing the following lines in the terminal:

export ABI_HOME=Replace_with_absolute_path_to_abinit_top_level_dir # Change this line
export PATH=$ABI_HOME/src/98_main/:$PATH      # Do not change this line: path to executable
export ABI_TESTS=$ABI_HOME/tests/             # Do not change this line: path to tests dir
export ABI_PSPDIR=$ABI_TESTS/Psps_for_tests/  # Do not change this line: path to pseudos dir

Examples in this tutorial use these shell variables: copy and paste the code snippets into the terminal (remember to set ABI_HOME first!) or, alternatively, source the script located in the ~abinit directory:

source ~abinit/

The ‘export PATH’ line adds the directory containing the executables to your PATH so that you can invoke the code by simply typing abinit in the terminal instead of providing the absolute path.

To execute the tutorials, create a working directory (Work*) and copy there the input files of the lesson.

Most of the tutorials do not rely on parallelism (except specific tutorials on parallelism). However you can run most of the tutorial examples in parallel with MPI, see the topic on parallelism.

1 The Harmonic part of the lattice model

As described in [Wojdel2013], the construction of a model starts by defining the reference structure (RS) of the system under study:

Schema 1

Fig. 1: Example of cubic RS made by two different (black and red) atomic species.

The choice of this RS is fundamental since the model will be based on perturbations acting on it. Once this choice is done, make sure than your system is fully relaxed and perform a single DFT calculation on this system in order to generate a DDB file. In this tutorial, we will take as an example of a material without instabilities, the perovskite CaTiO3 in the Pnma phase.

From the RS, now we consider the perturbations: the set of atomic displacements \boldsymbol{u} and lattice strain \boldsymbol{\eta}:

Schema 2

Fig. 2: Example of lattice perturbations: atomic displacements and strain.

At the harmonic level, we can express the potential energy as a sum of three contributions as a function of the set of perturbations (\boldsymbol{u}, \boldsymbol{\eta}):

\displaystyle E^{harm}(\boldsymbol{u},\boldsymbol{\eta}) = E^{harm}(\boldsymbol{u}) + E^{harm}(\boldsymbol{u},\boldsymbol{\eta}) + E^{harm}(\boldsymbol{\eta})

This calculation requires:

  • the computation of the phonon response (including short range and dipole-dipole interactions):
\displaystyle E^{harm}(\boldsymbol{u}) \Longrightarrow \underbrace{\frac{\partial^2 E}{\partial \boldsymbol{u}^2}}_{\substack{\text{Inter-atomic}\\\text{force constants}}} , \underbrace{\frac{\partial^2 E}{\partial {\boldsymbol{\cal{E}}}^2}}_{\text{Dielectric tensor}} , \underbrace{\frac{\partial^2 E}{\partial{\boldsymbol{\cal{E}}} \partial \boldsymbol{u}}}_{\text{Effective charges}}
  • the computation of the strain response: $$\displaystyle E^{harm}(\boldsymbol{\eta}) \Longrightarrow \underbrace{\frac{\partial^2 E}{\partial \boldsymbol{\eta}^2}}_{\text{Elastic constants}} $$

  • the computation of the strain-phonon coupling: $$\displaystyle E^{harm}(\boldsymbol{u},\boldsymbol{\eta}) \Longrightarrow \underbrace{\frac{\partial^2 E}{\partial\boldsymbol{\eta}\partial\boldsymbol{u}}}_{\substack{\text{Internal strain}}} $$

We note that all the needed quantities related to the harmonic part can be computed by using the DFPT method and, once obtained, they are stored in a database (DDB) file. In the case of an insulator, the dipole-dipole interaction will be recomputed directly by MULTIBINIT. Thereby you need to provide into the DDB file the clamped-ion dielectric tensor and the Born effective charges.


Do not forget to include in the final DDB file the DDB obtained from the RS single DFT calculation (you can still use Mrgddb). Indeed, the DDB file is also an output of a DFT calculation and, in order to build of a model, it is important to include it in the DDB file to be used.

In this tutorial, we will take as an example of a material without lattice instabilities: the perovskite CaTiO_3 in its Pnma phase.

Optional exercise \Longrightarrow Compute the phonon band structure with Anaddb. You can download the complete DDB file (resulting from the previous calculations) here: